home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 26
/
Cream of the Crop 26.iso
/
program
/
ccdl150l.zip
/
ALLOC
/
FREE.C
< prev
next >
Wrap
C/C++ Source or Header
|
1996-07-25
|
1KB
|
62 lines
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <libp.h>
extern void *_allocbloc;
extern int _allocflag;
static void memlink(char *buf)
{
BLKHEAD *blist = _allocbloc;
FREELIST *lpa = (size_t *)buf - 1;
while (blist) {
if (buf > blist && buf < blist->list + blist->list->size)
break;
blist=blist->next;
}
if (blist) {
FREELIST *lp2 = 0,*lp = blist->list;
while (lp) {
if (lp == buf)
break;
if (lp > buf) {
if (lp2 && ((char *)lp2+lp2->size == lpa)) {
lp2->size += lpa->size + sizeof(size_t);
if (lp2->size + (char *)lp2 == lp) {
lp2->size += lp->size;
lp2->next = lp->next;
}
}
else {
lpa->size = lpa->size + sizeof(size_t);
if (lp2) {
lpa->next = lp2->next;
lp2->next = lpa;
}
else {
lpa->next = blist->list;
blist->list = lpa;
}
if (lpa->size + (char *)lpa == lp) {
lpa->size += lp->size;
lpa->next = lp->next;
}
}
return;
}
lp2 = lp;
lp = lp->next;
}
}
}
void free(void *buf)
{
while (_allocflag)
_ll_transfer();
_allocflag = 1;
memlink((char *)buf);
_allocflag = 0;
}